2023/12/231302字符
指针
package main
import "fmt"
func main() {
var a int = 10
var b *int = &a // 指针变量
var c **int = &b // 指针的指针
var d ***int = &c // 指针的指针的指针
fmt.Println(b, c, d) //--> 0xc000014098 0xc00000e028 0xc00000e030
fmt.Println(*c, *d) //--> 0xc000014098 0xc00000e028
fmt.Println(**d) //--> 0xc000014098
}
数组指针
package main
import "fmt"
func main() {
a := 1
b := 2
c := 3
arr1 := [...]int{ a, b, c }
arr2 := [...]*int{ &a, &b, &c } // 指针数组
fmt.Println(arr2) //--> [0xc0000b2008 0xc0000b2010 0xc0000b2018]
fmt.Println(&a, &b, &c) //--> 0xc0000b2008 0xc0000b2010 0xc0000b2018
fmt.Println(&arr1[0], &arr1[1]) //--> 0xc0000b4018 0xc0000b4020
}
package main
import "fmt"
func main() {
sli := make([]int, 3, 3)
fmt.Printf("%p %p\n", &sli, &sli[0]) //--> 0xc0000a4018 0xc0000b4018
sliceChange(sli)
}
func sliceChange(sli []int) {
sli[0] = 10
fmt.Printf("%p %p\n", &sli, &sli[0]) //--> 0xc0000a4030 0xc0000b4018
}
通过指针浅克隆
package main
import "fmt"
func main() {
car1 := Car{
name: "BWM",
color: "white",
}
car2 := &car1
car2.name = "Benz"
fmt.Println(car1, car2) //--> {Benz white} {Benz white}
}
type Car struct {
name string
color string
}